<?php

/**
 * medio_sonido actions.
 *
 * @package    hipermedio
 * @subpackage medio_sonido
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class medio_sonidoActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->medio_sonidos = Doctrine_Core::getTable('MedioSonido')
      ->createQuery('a')
      ->execute();
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->medio_sonido = Doctrine_Core::getTable('MedioSonido')->findOneByNodoId(array($request->getParameter('nodo_id')));
    $this->forward404Unless($this->medio_sonido);
  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new MedioSonidoForm();
  
    $nodo_id = $request->getParameter('id');
    $this->nodo = Doctrine::getTable('Nodo')->findOneById($nodo_id);
    
    $ws = $this->form->getWidgetSchema();
    $ws['nodo_id']->setAttribute('value', $nodo_id);
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new MedioSonidoForm();

    $medio = $this->processForm($request, $this->form);

    if($medio){
        return $this->renderPartial('show', array('medio' => $medio));
    }
    else{
        $this->setTemplate('new');
    }
  }

  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($medio_sonido = Doctrine_Core::getTable('MedioSonido')->find(array($request->getParameter('id'))), sprintf('Object medio_sonido does not exist (%s).', $request->getParameter('id')));
    $this->form = new MedioSonidoForm($medio_sonido);
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($medio_sonido = Doctrine_Core::getTable('MedioSonido')->find(array($request->getParameter('id'))), sprintf('Object medio_sonido does not exist (%s).', $request->getParameter('id')));
    $this->form = new MedioSonidoForm($medio_sonido);

    $medio = $this->processForm($request, $this->form);

    if($medio){
        return $this->renderPartial('show', array('medio' => $medio));
    }
    else{
        $this->setTemplate('edit');
    }
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($medio_sonido = Doctrine_Core::getTable('MedioSonido')->find(array($request->getParameter('id'))), sprintf('Object medio_sonido does not exist (%s).', $request->getParameter('id')));
    $medio_sonido->delete();

    $this->redirect('medio_sonido/index');
  }

  
  public function executeUpload(sfWebRequest $request) {
        
        $error = "";
        $msg = "";
        $file = $request->getFiles('fileToUpload');
        $nodo_uuid = $request->getParameter('id');
        
        if (!empty($file['error'])) {
            switch ($file['error']) {

                case '1':
                    $error = 'El archivo supera la capacidad establecida en el parámetro upload_max_filesize del archivo php.ini';
                    break;
                case '2':
                    $error = 'El archivo excede el tamaño máximo establecido.';
                    break;
                case '3':
                    $error = 'El archivo no fue subido completamente.';
                    break;
                case '4':
                    $error = 'El archivo no fue subido.';
                    break;
                case '6':
                    $error = 'Missing a temporary folder.';
                    break;
                case '7':
                    $error = 'Error al guardar el archivo';
                    break;
                case '8':
                    $error = 'Proceso de subida fue detenida';
                    break;
                case '999':
                default:
                    $error = 'No hay disponible un código de error';
            }
        } elseif (empty($file['tmp_name']) || $file['tmp_name'] == 'none') {
            $error = 'Ningún archivo fue subido: '.$file['tmp_name'];
            $error .= 'Está vacío: '.empty($file['tmp_name']);
        } elseif(@filesize($file['tmp_name']) > 10485760){
            $error = 'El archivo de audio es demasiado grande';
            @unlink($file);  
        } else {
            $msg .= " Nombre del archivo: " . $file['name'] . "</br>";
            $msg .= " Tamaño del archivo: " . @filesize($file['tmp_name']);
            $msg .= " Id del nodo: " . $request->getParameter('id');
            
            // Vemos la extension del archivo
            $partes_ruta = pathinfo($file['name']);
            $extension = $partes_ruta['extension'];
            $name = $nodo_uuid.'.'.$extension;
            
            
            // Ruta donde guardamos el archivo
            $dest = sfConfig::get('sf_upload_dir').'/sonidos/'.$name;
            
            $msg .= " Nombre carpeta: " . sfConfig::get('sf_upload_dir').'/sonidos/'.$name;
            
            // Guardamos la imagen
            move_uploaded_file($file['tmp_name'], $dest);
           
            //for security reason, we force to remove all uploaded file
            @unlink($file);   
        }
        
        $s = "{";
        $s .= "error: '" . $error . "',\n";
        $s .= "msg: '" . $msg . "',\n";
        $s .= "name: '" . $name . "'\n";
        $s .= "}";
        
        return $this->renderText($s);
  }
  
  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $medio_sonido = $form->save();
      
      $nodo = $medio_sonido->getNodo();
      $nodo->setTipoMedio('sonido');
      $nodo->save();
      
      return $medio_sonido;

//      $this->redirect('nodo/show?id='.$medio_sonido->getNodoId());
    }
  }
  
  public function executeIframe(sfWebRequest $request){
    $this->forward404Unless($medio_sonido = Doctrine_Core::getTable('MedioSonido')->find(array($request->getParameter('id'))), sprintf('Object medio_sonido does not exist (%s).', $request->getParameter('id')));
    
    // Corrige el codigo
    $codigo_0 = html_entity_decode($medio_sonido->getCodigo());
    $codigo =  preg_replace('/width="\d+" height="\d+"/', 'width="180" height="135"', $codigo_0);
    $codigo = preg_replace('/<embed/', '<embed wmode="transparent"', $codigo);
    return $this->renderText($codigo);
  }
  
  public function executeIframeYoutube(sfWebRequest $request){
    $this->forward404Unless($medio_sonido = Doctrine_Core::getTable('MedioSonido')->find(array($request->getParameter('id'))), sprintf('Object medio_sonido does not exist (%s).', $request->getParameter('id')));
    
    $texto = '<embed src="'.$medio_sonido->getMiniURL().'" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="transparent" allowfullscreen="true" width="225" height="25"/>
            <noembed>
                <a href="'.$medio_sonido->getMiniURL().'"><img src="http://www.gtaero.net/ytmusic/play.png" alt="Play" style="border:0px;" /></a>
            </noembed>';
    return $this->renderText($texto);
  }
}
